/*
 * @Author: pengtianrui 2276608413@qq.com
 * @Date: 2024-07-19 14:42:56
 * @LastEditors: 武兴创 superjava@vip.qq.com
 * @LastEditTime: 2024-08-28 17:00:04
 * @FilePath: \SGFEM\DataStructure\FEM\Material\include\IsotropicMaterial.h
 * @Description: 线弹性各项同性材料
 * 线弹性材料支持的各项属性数据。
 * MAT1
 */
#pragma once
#include "DataStructure/Common/DataStructureNamespace.h"
#include "DataStructure/Common/Id.h"
#include "DataStructure/Common/Real.h"
#include "DataStructure/Input/Material/MaterialBase.h"

#include "MaterialTypes.h"

SG_DATASTRUCTURE_FEM_NAMESPACE_OPEN

struct IsotropicMaterial : public MaterialBase
{
    /// @brief 构造函数，创建各项同性材料
    /// @param id 材料属性号，默认0
    // IsotropicMaterial (SG::DataStructure::Common::Id id = 0);
    SG::DataStructure::Common::Real m_E        = 0.0;  ///< 弹性模量
    SG::DataStructure::Common::Real m_G        = 0.0;  ///< 剪切模量
    SG::DataStructure::Common::Real m_nu       = 0.0;  ///< 泊松比
    SG::DataStructure::Common::Real m_rho      = 0.0;  ///< 密度
    SG::DataStructure::Common::Real m_A        = 0.0;  ///< 热膨胀系数
    SG::DataStructure::Common::Real m_tref     = 0.0;  ///< 参考温度
    SG::DataStructure::Common::Real m_ge       = 0.0;  ///< 单元阻尼
    SG::DataStructure::Common::Real m_ST       = 0.0;  ///< 拉伸强度极限
    SG::DataStructure::Common::Real m_SC       = 0.0;  ///< 压缩强度极限
    SG::DataStructure::Common::Real m_SS       = 0.0;  ///< 剪切强度极限
    SG::DataStructure::Common::Id   m_mscId    = 0;    /// 材料坐标系标识号,仅用于PARAM，CURV
    SG::DataStructure::Common::Id   m_domainId = 0;

    static MaterialTypes GetType ()
    {
        return MaterialTypes::MATTYPE_Isotropic;
    };
};

DECLSPEC bool operator== (IsotropicMaterial const& lhs, IsotropicMaterial const& rhs);

SG_DATASTRUCTURE_FEM_NAMESPACE_CLOSE